home *** CD-ROM | disk | FTP | other *** search
- {
- To access record fields in Assembler you should define a Register to the
- ofset of the variable s or Record..
- Example:
- }
- Type MyRec = Record
- Hi :Byte;
- Lo :Word;
- S :String[90];
- End;
- Var
- Yup :MyRec;
- Begin
- asM
- Mov DI, Seg Yup;
- Push DI; { Save it just incase folloing code uses DI }
- { do what evr code you wish }
- Pop DI { Get back our pointer }
- Mov [DI+MyRec.Hi], AL; { Lets say AL was the reg u want }
- Mov [DI+RyRec.Lo], BX;
- { Ect }
- { ....
- Remember, if you enter an assembler rountine that passes a Array of Records
- then you must Load AX with the size of Your Record, Take the Array Pointer
- Index Times The AX using the MUL instructions then SubTrace the Size of the
- Record from the AX which would be the Results fo the multiply and then add
- that to the DI for a Total Offset to the correct Record;
- Example:
- I want Record # 2
- }
- Procedure Test( AR:Array[1..4] of MyRec);
- Begin
- ASm
- Mov Di, Offset AR;
- Mov AX, TypeOF(MyRec); { This generates the Size of the Record }
- MUL AX, 2; { I want to times it by 2 }
- SUB AX, TypeOf(MyRec);
- ADD DI,AX;
- { Now the DI pointers to the start of the #2 Record }
- { Of course this Record is on the stack in this example;
- Use a Globel methd or use the VAr in the Parms.
- it you use VAR then the Address must be gotten indirectly.
- Example:
- } LES DI, AR; { THis Loads the Address fo the Array from the STactk
- { Then you go through you same multipy stuff }